{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 变量\n",
    " * 增\n",
    " * 改\n",
    " * 查\n",
    " \n",
    "# 函数\n",
    " * 定义\n",
    " * 高参数\n",
    " * 输入\n",
    " * 输出"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tf.Tensor(3, shape=(), dtype=int32)\n",
      "3\n"
     ]
    }
   ],
   "source": [
    "import tensorflow as tf\n",
    "tf.enable_eager_execution()\n",
    "\n",
    "# 定义变量 \n",
    "x = 0\n",
    "# 改变量值\n",
    "x = 1\n",
    "# 定义计数函数 f\n",
    "def f(x):\n",
    "    # tf 内置加法\n",
    "    y = tf.add(x, 1)\n",
    "    return y\n",
    "# 函数名可随意定义(只要不与已有的函数名重名)\n",
    "def g123(x,params):\n",
    "    # tf 内置加法\n",
    "    # 所有函数都可以视为三部分，输入，高参，输出。\n",
    "    # 高参用于调节函数的具体行为。\n",
    "    y = tf.add(x, 1)*params\n",
    "    return y\n",
    "\n",
    "# x 从 0 一直循环 3 次\n",
    "# 计数是从 0 开始，到不大于 3，即 2 停止）\n",
    "for x in range(3):\n",
    "    # 变量 x 不断更新\n",
    "    x = f(x)\n",
    "# 显示 x    \n",
    "print(x)\n",
    "\n",
    "# 使用.numpy()方法 将 tensor 类型变成 numpy\n",
    "print(x.numpy())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 字典"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "15\n"
     ]
    }
   ],
   "source": [
    "# 用字典定义乘法表\n",
    "# 声明一个空的字典\n",
    "dic = {}\n",
    "for m1 in range(1,10):\n",
    "    for m2 in range(1,10):\n",
    "        # 向字典里增加内容 \n",
    "        # 方式： 字典名[键名] = 键值\n",
    "        dic['%sx%s' %(m1,m2)] = m1*m2\n",
    "# 利用键名来查看键值\n",
    "# 方式： 字典名[键名]\n",
    "# 看看 3x5 是不是 15\n",
    "print(dic['3x5'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 可视化\n",
    " * 二维坐标系"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7ff828039588>]"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 导入画图库包\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "x = tf.range(6) # tf 内置方法\n",
    "y = f(x)\n",
    "plt.plot(x,y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 变换\n",
    "* 自变量 x\n",
    "* 累积速度 w\n",
    "* 累积量 y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "w = 2 \n",
      "x = 3\n",
      "y = 6\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7ff828039240>]"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 累积速度\n",
    "# 这里 g 返回的累积速度永远不变，是线性的\n",
    "def g(x):\n",
    "    w = 2\n",
    "    return w \n",
    "\n",
    "# 累积量\n",
    "def f(x,w):\n",
    "    y = w*x\n",
    "    return y\n",
    "    \n",
    "print('w = %s ' %(g(3)))\n",
    "print('x = 3\\ny = %s' %f(3,g(x)))\n",
    "\n",
    "x = tf.range(6)\n",
    "y = f(x,g(3))\n",
    "w = [g(x)]*6\n",
    "# 画图\n",
    "plt.plot(x,y)\n",
    "plt.plot(x,w)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 列表 list\n",
    "* 增\n",
    "* 改\n",
    "* 查\n",
    "\n",
    "# 向量\n",
    " * 定义\n",
    " * 乘法\n",
    " * 检索"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "15\n"
     ]
    }
   ],
   "source": [
    "# 使用向量表示多个因素累积单个因素\n",
    "import numpy as np\n",
    "\n",
    "# list 的定义方法，x = [元素，元素，元素，...]\n",
    "l = [4,2]\n",
    "# 定义权重，斑马腿数与小鸟腿数\n",
    "# 随后变成 np.array 类型便于使用矩阵和向量的操作\n",
    "w = np.array([4,2]) \n",
    "# 定义偏移，斑马瘸了一条腿\n",
    "b = -1\n",
    "# 定义函数\n",
    "def f(x, w, b):\n",
    "    # 向量乘法\n",
    "    y = np.matmul(x,w) + b\n",
    "    return y\n",
    "# 看看 3 匹斑马，2个小鸟共多少条腿\n",
    "print(f([3,2],w,b))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 矩阵\n",
    " * 定义\n",
    " * 乘法\n",
    " * 检索\n",
    " \n",
    "# 类\n",
    " * 属性\n",
    " * 方法\n",
    " * __init__\n",
    " * __call__\n",
    " * 实例化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[15  9]\n"
     ]
    }
   ],
   "source": [
    "# 斑马和小鸟的腿数\n",
    "l1 = [4,2]\n",
    "# 斑马和小鸟的眼数\n",
    "l2 = [2,2]\n",
    "# 定义成矩阵\n",
    "#矩阵的定义方法，list 的内的元素也是等长的 list，x = [list，list，list，...]\n",
    "W = np.array([l1,l2]) \n",
    "# 瘸一条腿和瞎一只眼\n",
    "b = np.array([-1,-1])\n",
    "# 定义拥有属性和方法的类\n",
    "\n",
    "# 把参数 W 和 b 封装在类的内部，成为类的属性\n",
    "class F(object):\n",
    "    def __init__(self,W,b):\n",
    "        # 参数\n",
    "        # 给 参数 W 和 b 两个值\n",
    "        self.W = W\n",
    "        self.b = b\n",
    "    \n",
    "    def __call__(self, x):\n",
    "        # 正向传递：如何利用 参数 W 和 b 运算\n",
    "        # x 放在前面\n",
    "        y = np.matmul(x, self.W) + self.b\n",
    "        return y\n",
    "# 实例化 F 成 f\n",
    "# 这样每次都可以控制实例化时每个 f 内部的 W 和 b\n",
    "f = F(W,b)\n",
    "# 看看 3 匹斑马，2个小鸟共多少腿和眼睛\n",
    "print(f([3,2]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 参数\n",
    "* tfe.Variable 定义参数 parameters\n",
    "\n",
    "# 批量\n",
    "* 批量多因素累积多因素"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tf.Tensor(\n",
      "[[15  9]\n",
      " [17  9]], shape=(2, 2), dtype=int32)\n"
     ]
    }
   ],
   "source": [
    "# 批量多因素累积多因素\n",
    "tfe = tf.contrib.eager\n",
    "class F(object):\n",
    "    def __init__(self):\n",
    "        # 使用 tfe.Variable 来定义参数，用来与 tensorflow 对接\n",
    "        self.W = tfe.Variable([[4,2],[2,2]])\n",
    "        self.b = tfe.Variable([-1,-1])\n",
    "    \n",
    "    def __call__(self, x):\n",
    "        # 正向传递：如何利用 参数 W 和 b 运算\n",
    "        y = tf.matmul(x, self.W) + self.b\n",
    "        return y\n",
    "# 实例化 f\n",
    "f = F()\n",
    "# 看看 3 匹斑马，2个小鸟共多少腿和眼睛\n",
    "#      4 匹斑马，1个小鸟共多少腿和眼睛\n",
    "print(f([[3,2],[4,1]]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 微分\n",
    " * 单变量梯度：导数\n",
    " * 多变量梯度：偏导数乘以各自的单位向量"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 2., 12.], dtype=float32)"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 定义函数\n",
    "def f(x):\n",
    "    # y = x1^2 + x2^3\n",
    "    return x[0]**2+x[1]**3\n",
    "# 函数的导数\n",
    "grad_f = tfe.gradients_function(f)\n",
    "x = np.array([1,2],dtype='float32') # 导数需要极限，所以 int 这种不连续的类型无法使用，需要定义成 float型。\n",
    "grad_f(x)[0].numpy()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 高阶微分"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def f(x):\n",
    "    return tf.sin(x)\n",
    "\n",
    "# 高阶求导\n",
    "def grad(f):\n",
    "    return lambda x: tfe.gradients_function(f)(x)[0]\n",
    "\n",
    "x = tf.linspace(-5.0, 5.0, 50)\n",
    "plt.plot(x, f(x), label=\"f\")\n",
    "plt.plot(x, grad(f)(x), label=\"first derivative\")\n",
    "plt.plot(x, grad(grad(f))(x), label=\"second derivative\")\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
